package me.zhengjie.util;

import me.zhengjie.exception.ParameterException;
import me.zhengjie.util.ruoyiexcel.StringUtils;

import java.util.List;
import java.util.Objects;
import java.util.regex.Pattern;

/**
 * 断言工具类
 *
 * @author Long
 * @date 2021/7/7 16:27
 */
public class AssertUtils {

    /**
     * 手机号校验正则表达式
     */
    public static final String MOBILE_RULES = "^1((3[0-9])|(4[5-7])|(4[0|9])|(5[0-3])|(5[5-9])|66|(7[5-8])|(7[2|3])|(8[0-9])|(9[5-9])|(9[1|3]))\\d{8}$";
    /**
     * 18位身份证号正则表达式
     */
    public static final String idCard_RULES = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";


    /**
     * 前端参数断言不为空
     *
     * @param object  断言参数
     * @param message 提示信息
     */
    public static void isNotNull(Object object, String message) {
        if (object == null) {
            throw new ParameterException(message);
        }
        if (object instanceof String) {
            String str = (String) object;
            if (StringUtils.isBlank(str)) {
                throw new ParameterException(message);
            }
        }
    }

    /**
     * 断言集合不为空且有值
     *
     * @param list    断言集合
     * @param message 提示信息
     */
    public static void isNotEmpty(List list, String message) {
        if (list == null || list.size() == 0) {
            throw new ParameterException(message);
        }
    }

    /**
     * 断言集合为空
     *
     * @param list    断言集合
     * @param message 提示信息
     */
    public static void isEmpty(List list, String message) {
        if (!list.isEmpty()) {
            throw new ParameterException(message);
        }
    }

    /**
     * 断言两个对象不相等，相等则抛出异常
     *
     * @param o1 对象1
     * @param o2 对象2
     */
    public static void isNotEq(Object o1, Object o2, String message) {
        if (o1 instanceof String && o2 instanceof String) {
            if (Objects.equals(o1, o2)) {
                throw new ParameterException(message);
            }
        }
    }


    /**
     * 校验是否是手机号正确格式
     *
     * @param mobile
     */
    public static void isMobile(String mobile, String message) {
        /*如果是空手机号就不做校验*/
        if (StringUtils.isBlank(mobile)) return;
        boolean matche = Pattern.matches(MOBILE_RULES, mobile);
        if (!matche) throw new ParameterException(StringUtils.isNotBlank(message) ? message : "手机号格式不正确");
    }

    /**
     * 校验是否是身份证格式
     *
     * @param idCard 身份证号
     */
    public static void isIdCard(String idCard, String message) {
        /*如果是空手机号就不做校验*/
        if (StringUtils.isBlank(idCard)) return;
        boolean matche = Pattern.matches(idCard_RULES, idCard);
        if (!matche) throw new ParameterException(StringUtils.isNotBlank(message) ? message : "身份证号格式不正确");
    }


}
